package Servicios;

import DAO.DAOHorario;
import Dominio.AsignaturaOfertaAcademica;
import Dominio.FragmentoHorario;
import Dominio.OfertasAsig;
import Dominio.Profesor;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.biff.CountryCode;
import jxl.read.biff.BiffException;

public class LectorOfertaAcademica {

    private OfertasAsig asignaturasOferta;

    public OfertasAsig leerReticulaAcademica(String archivo) {
        try {
            WorkbookSettings wbSettings = new WorkbookSettings();
            wbSettings.setEncoding("ISO-8859-1");
            wbSettings.setLocale(new Locale("es", "ES"));
            wbSettings.setExcelDisplayLanguage("ES");
            wbSettings.setExcelRegionalSettings("ES");
            wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
            Workbook archivoOF = Workbook.getWorkbook(new File(archivo), wbSettings);
            if (archivoOF.getNumberOfSheets() > 0) {
                Sheet hoja = archivoOF.getSheet(0);
                int numeroFilas = hoja.getRows();
                int numeroColumnas = hoja.getColumns();
                if (numeroFilas > 1 && numeroColumnas > 1) {
                    ArrayList<AsignaturaOfertaAcademica> asignaturas = new ArrayList<AsignaturaOfertaAcademica>();
                    for (int i = 1; i < numeroFilas; i++) {

                        ArrayList<FragmentoHorario> horarios = new ArrayList<FragmentoHorario>();

                        if(i >= 126) {
                            int breakpoint = 1;
                        }
                        
//                        String nombreAsigParaBD = "";
                        String nombreAsig = hoja.getCell(1, i).getContents().toUpperCase();
//                        if(nombreAsig.contains("(")){
//                        StringTokenizer token = new StringTokenizer(nombreAsig);
//                        while (token.hasMoreTokens()) {
//                            String parceo = token.nextToken();
//                            if (!parceo.startsWith("(")) {
//                                nombreAsigParaBD += " " + parceo;
//                            }
//                        }
//                        }
//                        else{
//                        nombreAsigParaBD = nombreAsig;
//                        }

                        String PE = hoja.getCell(2, i).getContents().toUpperCase();
                        String semestre = hoja.getCell(3, i).getContents().toUpperCase();
                        String gradoProf = hoja.getCell(4, i).getContents().toUpperCase();
                        String nombreProf = hoja.getCell(5, i).getContents().toUpperCase();
                        String apeProf = hoja.getCell(6, i).getContents().toUpperCase();
                        AsignaturaOfertaAcademica asigOF = new AsignaturaOfertaAcademica();
                        asigOF.setNombre(nombreAsig);
                        asigOF.setProgramaEducativo(PE);
                        asigOF.setSemestre(semestre);
                        
                        Profesor prof = new Profesor();
                        prof.setNombre(nombreProf);
                        prof.setApellido(apeProf);
                        prof.setGradoAcademico(gradoProf);
                        asigOF.setMaestro(prof);
                        for (int j = 7; j < numeroColumnas; j++) {
                            String dia = hoja.getCell(j, 0).getContents().toUpperCase();
                            String hora = hoja.getCell(j, i).getContents().toUpperCase();
                            if (!hora.equals("")) {
                                FragmentoHorario horarioAsig = new FragmentoHorario();

                                String horaInicio = "";
                                String horaFin = "";
                                hora = quitarEspacios(hora);
                                StringTokenizer tokens = new StringTokenizer(hora, "-");
                                while (tokens.hasMoreTokens()) {
//                                    System.out.println("Fila:"+i+ " Columna:" + j);
                                    horaInicio = tokens.nextToken();
                                    if(tokens.hasMoreTokens()){
                                    horaFin = tokens.nextToken();
                                    }
                                }
                                j++;
                                String aula = hoja.getCell(j, i).getContents().toUpperCase();
                                horarioAsig.setDiaSemana(dia);
                                horarioAsig.setAula(aula);
                                horarioAsig.setHoraInicio(horaInicio);
                                horarioAsig.setHoraFin(horaFin);
                                horarios.add(horarioAsig);
                            } else {
                               j++;
                            }


                        }
                         asigOF.setHorario(horarios);
                         asignaturas.add(asigOF);
                    }// por cada fila

                   //cuando ya termino de leer el excel
                        asignaturasOferta = new OfertasAsig(asignaturas);

                } 
                else {
                    System.out.println("Archivo no válido para importación de retícula.");
                    return null;
                }
            }
            else {
                System.out.println("Archivo no válido para importación de retícula.");
                return null;
            }
       
       
        } catch (IOException ex) {
            Logger.getLogger(LectorOfertaAcademica.class.getName()).log(Level.SEVERE, null, ex);
        } catch (BiffException ex) {
            Logger.getLogger(LectorOfertaAcademica.class.getName()).log(Level.SEVERE, null, ex);
        }
         return asignaturasOferta;
    }
    
    private String quitarEspacios(String cadena){
    return cadena.replace(" ", "");
    }

    public static void main(String arg[]) {
        ArrayList<AsignaturaOfertaAcademica> asignaturas = new ArrayList<AsignaturaOfertaAcademica>();
        LectorOfertaAcademica lector = new LectorOfertaAcademica();
        OfertasAsig of = lector.leerReticulaAcademica("C:\\Users\\54670\\Desktop\\ofertasAcademica.xls");
        asignaturas = of.getAsignaturas();
        AsignaturaOfertaAcademica asigOf = asignaturas.get(30);
      
        
        System.out.println("Nombre de maestro: "+asigOf.getMaestro().getNombre());
        System.out.println("Nombre Asignatura: "+asigOf.getNombre());
        System.out.println("Dias que se imparten: "+asigOf.getHorario().size()+ " dias");
    }
}
